/**
 * 
 */
package net.teamclerks.rpgf.character.stats;

import net.teamclerks.rpgf.script.director.Director;

/**
 * Stat is the basis for calculating mathematics in any RPG. How
 * much strength does a Character have, therefore, how hard do
 * they hit, etc. Stat's are really just glorified double-holders.
 * 
 * @author kain
 *
 */
public class Stat
{
  /// PUBLIC FINAL VARIABLES ///
  public static final int STAT_SLOT_STRENGTH                  = 0;
  public static final int STAT_SLOT_AGILITY                   = 1;
  public static final int STAT_SLOT_STAMINA                   = 2;
  public static final int STAT_SLOT_INTELLECT                 = 3;
  public static final int STAT_SLOT_SPIRIT                    = 4;
  public static final int STAT_SLOT_WISDOM                    = 5;
  public static final int STAT_SLOT_ATTACK_POWER              = 6;
  public static final int STAT_SLOT_SPELL_POWER               = 7;
  public static final int STAT_SLOT_SPEED                     = 8;
  public static final int STAT_SLOT_VITALITY                  = 9;
  public static final int STAT_SLOT_WILL                      = 10;
  public static final int STAT_SLOT_NAME                      = 11;
  public static final int STAT_SLOT_HIT_POINTS_TOTAL          = 12;
  public static final int STAT_SLOT_HIT_POINTS_CURRENT        = 13;
  public static final int STAT_SLOT_MANA_POINTS_TOTAL         = 14;
  public static final int STAT_SLOT_MANA_POINTS_CURRENT       = 15;
  public static final int STAT_SLOT_EXPERIENCE_CURRENT        = 16;
  public static final int STAT_SLOT_EXPERIENCE_FOR_NEXT_LEVEL = 17;
  public static final int STAT_SLOT_LEVEL                     = 18;
  
  /// DATAPOINTS///
  protected double value;
  protected String name;
  
  /// CONTROL DATA ///
  protected Director director;
  
  /// DENY CONSTRUCTOR ///
  private Stat(){}
  
  /// PUBLIC CONSTRUCTOR ///
  public Stat(Director director)
  {
    this();
    this.director = director;
  }
  public Stat(Director director, Stat stat)
  {
    this(director);
    this.name = stat.getName();
    this.value = stat.getValue();
  }

  /// PUBLIC FINAL METHODS ///
  /**
   * @return the value
   */
  public final double getValue()
  {
    return value;
  }
  /**
   * @param value the value to set
   */
  public final void setValue(double value)
  {
    this.value = value;
  }
  /**
   * @return the name
   */
  public final String getName()
  {
    return name;
  }
  /**
   * @param name the name to set
   */
  public final void setName(String name)
  {
    this.name = name;
  }
}
